package com.zed.api.common.adpt;

/**
 * 适配对象工厂
 *
 * <p>
 * {@code AdaptObjectFactory}, 提供{@link #createAdaptObject(Object, Class)}方法用于创建适配的对象
 *
 * @author Zed
 */
public interface AdaptObjectFactory<A> {

    /**
     * 宿主类型
     *
     * @return {@link Class}
     */
    Class<?> getHostType();

    /**
     * 支持的适配对象
     *
     * @return {@link Class}
     */
    Class<A> supportAdaptObject();

    /**
     * 创建可适配对象,如果不支持对{@code host}适配{@link A},则返回null.
     *
     * @param host {@link Object}, 需要适配的宿主
     * @return {@link A}, 不支持适配返回null.
     */
    A createAdaptObject(Object host, Class<A> adaptType);
}
